package Day013_线程安全.demo02_死锁;

/**
 * @author zhangyan
 * @date 2020/5/4 10:36
 */
/*
    在多线程程序中,使用了多把锁,造成线程之间相互等待.程序不往下走了

    产生死锁的条件:
            1.有多把锁
            2.有多个线程
            3.有同步代码块嵌套

 */

public class Test {
    public static void main(String[] args) {
        //创建并执行张三线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                //任务
                synchronized ("锁A") {
                    System.out.println("张三线程:拿到锁A,等待获取锁B...");
                    synchronized ("锁B") {
                        System.out.println("张三线程:拿到锁A,锁B,进入房间");
                    }
                } //此时才会释放锁A,如果拿不到锁B就不会释放
            }
        }).start();

        //创建并执行李四线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                //任务
                synchronized ("锁B") {
                    System.out.println("李四线程:拿到锁B,等待获取锁A...");
                    synchronized ("锁A") {
                        System.out.println("李四线程:拿到锁A,锁B,进入房间");
                    }
                } //此时才会释放锁B,如果拿不到锁A就不会释放
            }
        }).start();
    }
}
